public class 简单使用 {
    public static void main(String[] args) throws InterruptedException {
        Object lock = new Object();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    synchronized (lock) {
                        //先做一些事情
                        System.out.println("线程1：步骤1");
                        //在某些条件下，就需要等待
                        lock.wait();
                        //被唤醒，就做另一些事情
                        System.out.println("线程1：步骤2");
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
        /**
         * 执行顺序：
         * 线程1 synchronized -> wait
         * 线程2 synchronized -> notify
         * 线程1 wait 往下
         */
        Thread.sleep(100);
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock){
                    //做一些事情
                    System.out.println("线程2：步骤1");
                    //通知线程1：唤醒执行
                    lock.notify();
                    //做另一些事情
                    System.out.println("线程2：步骤2");
                }
            }
        }).start();
    }
}
